css: Make the style provider take a matcher as an input argument
authorBenjamin Otte <otte@redhat.com>
Sat, 17 Mar 2012 01:36:11 +0000 (02:36 +0100)
committerBenjamin Otte <otte@redhat.com>
Tue, 17 Apr 2012 06:59:07 +0000 (08:59 +0200)
12 files changed:
gtk/gtkcssmatcher.c
gtk/gtkcssmatcherprivate.h
gtk/gtkcssprovider.c
gtk/gtkcssselector.c
gtk/gtkcssselectorprivate.h
gtk/gtkmodifierstyle.c
gtk/gtksettings.c
gtk/gtkstylecascade.c
gtk/gtkstylecontext.c
gtk/gtkstyleproperties.c
gtk/gtkstyleproviderprivate.c
gtk/gtkstyleproviderprivate.h

index 583b80301e7893a951daecc0047811bd54886fe3..c12403ecd89ef32213aa0ab495007569e978c416 100644 (file)
@@ -62,11 +62,10 @@ _gtk_css_matcher_get_previous (GtkCssMatcher       *matcher,
   return TRUE;
 }
 
-gboolean
-_gtk_css_matcher_has_state (const GtkCssMatcher *matcher,
-                            GtkStateFlags        state_flags)
+GtkStateFlags
+_gtk_css_matcher_get_state (const GtkCssMatcher *matcher)
 {
-  return (matcher->state_flags & state_flags) == state_flags;
+  return matcher->state_flags;
 }
 
 gboolean
index 61988a296b2e95c83501cfa0f55630b6447296a5..704de5332c770f172483a5bff6f785f3fa558881 100644 (file)
@@ -40,8 +40,7 @@ gboolean          _gtk_css_matcher_get_parent     (GtkCssMatcher          *match
 gboolean          _gtk_css_matcher_get_previous   (GtkCssMatcher          *matcher,
                                                    const GtkCssMatcher    *next);
 
-gboolean          _gtk_css_matcher_has_state      (const GtkCssMatcher   *matcher,
-                                                   GtkStateFlags          state_flags);
+GtkStateFlags     _gtk_css_matcher_get_state      (const GtkCssMatcher   *matcher);
 gboolean          _gtk_css_matcher_has_name       (const GtkCssMatcher   *matcher,
                                                    const char            *name);
 gboolean          _gtk_css_matcher_has_class      (const GtkCssMatcher   *matcher,
index 9cd891fc8161ff1d9c0bd4816eced182bc40e96f..93201007aacf88db97eb376b5ed8bd33ea623ead 100644 (file)
@@ -1293,11 +1293,10 @@ gtk_css_ruleset_add (GtkCssRuleset       *ruleset,
 }
 
 static gboolean
-gtk_css_ruleset_matches (GtkCssRuleset *ruleset,
-                         GtkWidgetPath *path,
-                         GtkStateFlags  state)
+gtk_css_ruleset_matches (GtkCssRuleset       *ruleset,
+                         const GtkCssMatcher *matcher)
 {
-  return _gtk_css_selector_matches (ruleset->selector, path, state);
+  return _gtk_css_selector_matches (ruleset->selector, matcher);
 }
 
 static void
@@ -1469,6 +1468,7 @@ static GtkStyleProperties *
 gtk_css_provider_get_style (GtkStyleProvider *provider,
                             GtkWidgetPath    *path)
 {
+  GtkCssMatcher matcher;
   GtkCssProvider *css_provider;
   GtkCssProviderPrivate *priv;
   GtkStyleProperties *props;
@@ -1479,6 +1479,7 @@ gtk_css_provider_get_style (GtkStyleProvider *provider,
   props = gtk_style_properties_new ();
 
   css_provider_dump_symbolic_colors (css_provider, props);
+  _gtk_css_matcher_init (&matcher, path, 0);
 
   for (i = 0; i < priv->rulesets->len; i++)
     {
@@ -1489,7 +1490,7 @@ gtk_css_provider_get_style (GtkStyleProvider *provider,
       if (ruleset->styles == NULL)
         continue;
 
-      if (!gtk_css_ruleset_matches (ruleset, path, 0))
+      if (!gtk_css_ruleset_matches (ruleset, &matcher))
         continue;
 
       for (j = 0; j < ruleset->n_styles; j++)
@@ -1512,6 +1513,7 @@ gtk_css_provider_get_style_property (GtkStyleProvider *provider,
   GtkCssProvider *css_provider = GTK_CSS_PROVIDER (provider);
   GtkCssProviderPrivate *priv = css_provider->priv;
   WidgetPropertyValue *val;
+  GtkCssMatcher matcher;
   gboolean found = FALSE;
   gchar *prop_name;
   gint i;
@@ -1519,6 +1521,7 @@ gtk_css_provider_get_style_property (GtkStyleProvider *provider,
   prop_name = g_strdup_printf ("-%s-%s",
                                g_type_name (pspec->owner_type),
                                pspec->name);
+  _gtk_css_matcher_init (&matcher, path, 0);
 
   for (i = priv->rulesets->len - 1; i >= 0; i--)
     {
@@ -1529,7 +1532,7 @@ gtk_css_provider_get_style_property (GtkStyleProvider *provider,
       if (ruleset->widget_style == NULL)
         continue;
 
-      if (!gtk_css_ruleset_matches (ruleset, path, state))
+      if (!gtk_css_ruleset_matches (ruleset, &matcher))
         continue;
 
       for (val = ruleset->widget_style; val != NULL; val = val->next)
@@ -1581,8 +1584,7 @@ gtk_css_style_provider_get_color (GtkStyleProviderPrivate *provider,
 
 static void
 gtk_css_style_provider_lookup (GtkStyleProviderPrivate *provider,
-                               GtkWidgetPath           *path,
-                               GtkStateFlags            state,
+                               const GtkCssMatcher     *matcher,
                                GtkCssLookup            *lookup)
 {
   GtkCssProvider *css_provider;
@@ -1606,7 +1608,7 @@ gtk_css_style_provider_lookup (GtkStyleProviderPrivate *provider,
                                     ruleset->set_styles))
         continue;
 
-      if (!gtk_css_ruleset_matches (ruleset, path, state))
+      if (!gtk_css_ruleset_matches (ruleset, matcher))
         continue;
 
       for (j = 0; j < ruleset->n_styles; j++)
index 746394918f92954ecf11a9d931ddc89de9e061fd..4bac4b4f2b6e9028ba4b36df7fe9240d4c251fb4 100644 (file)
@@ -21,7 +21,6 @@
 
 #include <string.h>
 
-#include "gtkcssmatcherprivate.h"
 #include "gtkcssprovider.h"
 #include "gtkstylecontextprivate.h"
 
@@ -370,7 +369,9 @@ static gboolean
 gtk_css_selector_pseudoclass_state_match (const GtkCssSelector *selector,
                                           const GtkCssMatcher  *matcher)
 {
-  if (!_gtk_css_matcher_has_state (matcher, GPOINTER_TO_UINT (selector->data)))
+  GtkStateFlags state = GPOINTER_TO_UINT (selector->data);
+
+  if ((_gtk_css_matcher_get_state (matcher) & state) != state)
     return FALSE;
 
   return gtk_css_selector_match (gtk_css_selector_previous (selector), matcher);
@@ -829,18 +830,14 @@ _gtk_css_selector_to_string (const GtkCssSelector *selector)
  * Returns: %TRUE if the selector matches @path
  **/
 gboolean
-_gtk_css_selector_matches (const GtkCssSelector      *selector,
-                           const GtkWidgetPath       *path,
-                           GtkStateFlags              state)
+_gtk_css_selector_matches (const GtkCssSelector *selector,
+                           const GtkCssMatcher  *matcher)
 {
-  GtkCssMatcher matcher;
 
   g_return_val_if_fail (selector != NULL, FALSE);
-  g_return_val_if_fail (path != NULL, FALSE);
-
-  _gtk_css_matcher_init (&matcher, path, state);
+  g_return_val_if_fail (matcher != NULL, FALSE);
 
-  return gtk_css_selector_match (selector, &matcher);
+  return gtk_css_selector_match (selector, matcher);
 }
 
 /* Computes specificity according to CSS 2.1.
index c0ff428e0ad12391b384fc2bee9a955858df28bb..e1d762386798c7cc62a847b87f82c9554f63bf75 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <gtk/gtkenums.h>
 #include <gtk/gtktypes.h>
+#include "gtk/gtkcssmatcherprivate.h"
 #include "gtk/gtkcssparserprivate.h"
 
 G_BEGIN_DECLS
@@ -36,8 +37,7 @@ void              _gtk_css_selector_print           (const GtkCssSelector   *sel
 GtkStateFlags     _gtk_css_selector_get_state_flags (const GtkCssSelector   *selector);
 
 gboolean          _gtk_css_selector_matches         (const GtkCssSelector   *selector,
-                                                     const GtkWidgetPath    *path,
-                                                     GtkStateFlags           state);
+                                                     const GtkCssMatcher    *matcher);
 int               _gtk_css_selector_compare         (const GtkCssSelector   *a,
                                                      const GtkCssSelector   *b);
 
index 35ad0ea6ddb0b586f07b34c874fbaf00f30557c3..c16a051c445206a562645de8c0d822665c981fb3 100644 (file)
@@ -144,15 +144,13 @@ gtk_modifier_style_provider_get_color (GtkStyleProviderPrivate *provider,
 
 static void
 gtk_modifier_style_provider_lookup (GtkStyleProviderPrivate *provider,
-                                    GtkWidgetPath           *path,
-                                    GtkStateFlags            state,
+                                    const GtkCssMatcher     *matcher,
                                     GtkCssLookup            *lookup)
 {
   GtkModifierStyle *style = GTK_MODIFIER_STYLE (provider);
 
   _gtk_style_provider_private_lookup (GTK_STYLE_PROVIDER_PRIVATE (style->priv->style),
-                                      path,
-                                      state,
+                                      matcher,
                                       lookup);
 }
 
index f265642bbf4eeca515cac8aea8f0291b53f5ad92..75487b8239d7ce60b233da8e2bff00db4885cd57 100644 (file)
@@ -1469,8 +1469,7 @@ gtk_settings_style_provider_get_color (GtkStyleProviderPrivate *provider,
 
 static void
 gtk_settings_style_provider_lookup (GtkStyleProviderPrivate *provider,
-                                    GtkWidgetPath           *path,
-                                    GtkStateFlags            state,
+                                    const GtkCssMatcher     *matcher,
                                     GtkCssLookup            *lookup)
 {
   GtkSettings *settings = GTK_SETTINGS (provider);
@@ -1478,8 +1477,7 @@ gtk_settings_style_provider_lookup (GtkStyleProviderPrivate *provider,
   settings_ensure_style (settings);
 
   _gtk_style_provider_private_lookup (GTK_STYLE_PROVIDER_PRIVATE (settings->priv->style),
-                                      path,
-                                      state,
+                                      matcher,
                                       lookup);
 }
 
index 0c427ce8194bb4c7040781992346385c6f17dc2f..f1bf5161258f35bede28d903ad19975a40b3dd35 100644 (file)
@@ -173,8 +173,7 @@ gtk_style_cascade_get_color (GtkStyleProviderPrivate *provider,
 
 static void
 gtk_style_cascade_lookup (GtkStyleProviderPrivate *provider,
-                          GtkWidgetPath           *path,
-                          GtkStateFlags            state,
+                          const GtkCssMatcher     *matcher,
                           GtkCssLookup            *lookup)
 {
   GtkStyleCascade *cascade = GTK_STYLE_CASCADE (provider);
@@ -188,22 +187,13 @@ gtk_style_cascade_lookup (GtkStyleProviderPrivate *provider,
       if (GTK_IS_STYLE_PROVIDER_PRIVATE (item))
         {
           _gtk_style_provider_private_lookup (GTK_STYLE_PROVIDER_PRIVATE (item),
-                                              path,
-                                              state,
+                                              matcher,
                                               lookup);
         }
       else
         {
-          GtkStyleProperties *provider_style = gtk_style_provider_get_style (item, path);
-
-          if (provider_style)
-            {
-              _gtk_style_provider_private_lookup (GTK_STYLE_PROVIDER_PRIVATE (provider_style),
-                                                  path,
-                                                  state,
-                                                  lookup);
-              g_object_unref (provider_style);
-            }
+          /* you lose */
+          g_warn_if_reached ();
         }
     }
 }
index 9be3a85a6da267d711aa911aad54a559834591ed..415b186188ed506a227d6e226ea23929683b63aa 100644 (file)
@@ -884,15 +884,16 @@ build_properties (GtkStyleContext *context,
                   GtkStateFlags    state)
 {
   GtkStyleContextPrivate *priv;
+  GtkCssMatcher matcher;
   GtkCssLookup *lookup;
 
   priv = context->priv;
 
+  _gtk_css_matcher_init (&matcher, path, state);
   lookup = _gtk_css_lookup_new ();
 
   _gtk_style_provider_private_lookup (GTK_STYLE_PROVIDER_PRIVATE (priv->cascade),
-                                      path,
-                                      state,
+                                      &matcher,
                                       lookup);
 
   style_data->store = _gtk_css_computed_values_new ();
index e73e74b6ac66b2a69367f4dba609dd880be45e06..5add14dfc2328f136e8147fc5ad86468404d3791 100644 (file)
@@ -303,8 +303,7 @@ gtk_style_properties_provider_get_color (GtkStyleProviderPrivate *provider,
 
 static void
 gtk_style_properties_provider_lookup (GtkStyleProviderPrivate *provider,
-                                      GtkWidgetPath           *path,
-                                      GtkStateFlags            state,
+                                      const GtkCssMatcher     *matcher,
                                       GtkCssLookup            *lookup)
 {
   GtkStyleProperties *props;
@@ -330,7 +329,7 @@ gtk_style_properties_provider_lookup (GtkStyleProviderPrivate *provider,
       if (!_gtk_css_lookup_is_missing (lookup, id))
           continue;
 
-      value = property_data_match_state (data, state);
+      value = property_data_match_state (data, _gtk_css_matcher_get_state (matcher));
       if (value == NULL)
         continue;
 
index bd943e17397ac5ebe3ced5cf7c3ac5dc2833b338..43ae1712ff4a23f55b39338c2e687979883a6a56 100644 (file)
@@ -45,14 +45,13 @@ _gtk_style_provider_private_get_color (GtkStyleProviderPrivate *provider,
 
 void
 _gtk_style_provider_private_lookup (GtkStyleProviderPrivate *provider,
-                                    GtkWidgetPath           *path,
-                                    GtkStateFlags            state,
+                                    const GtkCssMatcher     *matcher,
                                     GtkCssLookup            *lookup)
 {
   GtkStyleProviderPrivateInterface *iface;
 
   g_return_if_fail (GTK_IS_STYLE_PROVIDER_PRIVATE (provider));
-  g_return_if_fail (path != NULL);
+  g_return_if_fail (matcher != NULL);
   g_return_if_fail (lookup != NULL);
 
   iface = GTK_STYLE_PROVIDER_PRIVATE_GET_INTERFACE (provider);
@@ -60,5 +59,5 @@ _gtk_style_provider_private_lookup (GtkStyleProviderPrivate *provider,
   if (!iface->lookup)
     return;
 
-  iface->lookup (provider, path, state, lookup);
+  iface->lookup (provider, matcher, lookup);
 }
index ac7ac3d80683a7713ee44ed7f2b731c24f8ca8c4..e0555026c6328d837cfbd7bf941c53da59ebb82d 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <glib-object.h>
 #include "gtk/gtkcsslookupprivate.h"
+#include "gtk/gtkcssmatcherprivate.h"
 #include <gtk/gtkenums.h>
 #include <gtk/gtksymboliccolor.h>
 #include <gtk/gtktypes.h>
@@ -41,8 +42,7 @@ struct _GtkStyleProviderPrivateInterface
   GtkSymbolicColor *    (* get_color)           (GtkStyleProviderPrivate *provider,
                                                  const char              *name);
   void                  (* lookup)              (GtkStyleProviderPrivate *provider,
-                                                 GtkWidgetPath           *path,
-                                                 GtkStateFlags            state,
+                                                 const GtkCssMatcher     *matcher,
                                                  GtkCssLookup            *lookup);
 };
 
@@ -51,8 +51,7 @@ GType                   _gtk_style_provider_private_get_type     (void) G_GNUC_C
 GtkSymbolicColor *      _gtk_style_provider_private_get_color    (GtkStyleProviderPrivate *provider,
                                                                   const char              *name);
 void                    _gtk_style_provider_private_lookup       (GtkStyleProviderPrivate *provider,
-                                                                  GtkWidgetPath           *path,
-                                                                  GtkStateFlags            state,
+                                                                  const GtkCssMatcher     *matcher,
                                                                   GtkCssLookup            *lookup);
 
 G_END_DECLS